home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / abreed3.lha / FlyingScalyBall.s < prev    next >
Text File  |  1995-09-14  |  16KB  |  1,017 lines

  1. ItsAFlyingNasty:
  2.  
  3.  tst.b NASTY
  4.  bne .yesnas
  5.  move.w #-1,12(a0)
  6.  rts
  7. .yesnas:
  8.  
  9.  clr.b exitfirst
  10.  
  11.  move.b worry(a0),d0
  12.  move.b d0,d1
  13.  and.w #128,d1
  14.  and.b #127,d0
  15.  sub.b #1,d0
  16.  bge.s .oknn
  17.  move.b #0,d0
  18. .oknn: 
  19.  
  20.  add.b d0,d1
  21.  move.b d1,worry(a0)
  22.  
  23.  move.w (a0),CollId
  24.  move.w #160,extlen
  25.  move.b #2,awayfromwall
  26.  
  27.  move.l #0,StepUpVal
  28.  move.l #$1000000,StepDownVal
  29.  move.l #96*128,thingheight
  30.  move.w #8,screamsound
  31.  move.w #64,nasheight
  32.  
  33.  move.w #$6060,6(a0)
  34.  
  35.  clr.b gotgun
  36.  move.w 12(a0),d2
  37.  bge.s .stillalive
  38. .notthisone:
  39.  rts
  40. .stillalive:
  41.  
  42.  tst.b numlives(a0)
  43.  bgt .notdying
  44.  move.b #0,numlives(a0)
  45.  move.l ZoneAdds,a1
  46.  move.l (a1,d2.w*4),a1
  47.  add.l LEVELDATA,a1
  48.  move.l ToZoneFloor(a1),d0
  49.  tst.b ObjInTop(a0)
  50.  beq.s .notintopp
  51.  move.l ToUpperFloor(a1),d0
  52. .notintopp:
  53.  asr.l #7,d0
  54.  sub.w nasheight,d0
  55.  cmp.w 4(a0),d0
  56.  ble.s .putitin
  57.  move.w TempFrames,d0
  58.  asl.w #4,d0
  59.  add.w d0,4(a0)
  60.  add.w d0,FourthTimer(a0)
  61.  bra .nosplatch
  62.  
  63. .putitin:
  64.  move.w d0,4(a0)
  65.  
  66.  cmp.w #20,10(a0)
  67.  bne.s .notyet
  68.  move.w #80,d0
  69.  jsr FindCloseRoom
  70.  rts
  71. .notyet:
  72.  
  73.  move.w FourthTimer(a0),d0
  74.  asr.w #4,d0
  75.  add.w #1,d0
  76.  move.w d0,d2
  77.  
  78.  move.w (a0),d0
  79.  move.l ObjectPoints,a1
  80.  move.w (a1,d0.w*8),newx
  81.  move.w 4(a1,d0.w*8),newz
  82.  
  83.  movem.l d0-d7/a0-a6,-(a7)
  84.  move.w #0,d0
  85.  move.w #31,d3
  86.  jsr ExplodeIntoBits
  87.  movem.l (a7)+,d0-d7/a0-a6
  88.  move.w #20,10(a0)
  89.  move.w #80,d0
  90.  jsr FindCloseRoom
  91.  
  92.  rts
  93. .nosplatch
  94.  
  95.  move.w TempFrames,d0
  96.  sub.w d0,ThirdTimer(a0)
  97.  bge.s .onfloordead
  98.  move.w #20,ThirdTimer(a0)
  99.  
  100.  move.w 10(a0),d0
  101.  cmp.w #19,d0
  102.  bge .onfloordead
  103.  add.w #1,10(a0)
  104.  move.w #80,d0
  105.  jsr FindCloseRoom
  106.  
  107.  rts
  108.  
  109. .onfloordead:
  110.  move.w #80,d0
  111.  jsr FindCloseRoom
  112.  
  113.  rts
  114.  
  115. .notdying: 
  116.  
  117.  tst.b 17(a0)
  118.  beq.s .cantseeplayer
  119.  tst.w ThirdTimer(a0)
  120.  ble FlyingBallAttack
  121.  move.w TempFrames,d0
  122.  sub.w d0,ThirdTimer(a0)
  123.  bra .waitandsee
  124.  
  125. .cantseeplayer:
  126.  
  127.  jsr GetRand
  128.  lsr.w #4,d0
  129.  and.w #31,d0
  130.  add.w #10,d0
  131.  move.w d0,ThirdTimer(a0)
  132.  
  133. .waitandsee:
  134.  
  135.  move.w #30,FourthTimer(a0)
  136.  
  137.  move.w 12(a0),d2
  138.  move.l ZoneAdds,a5
  139.  move.l (a5,d2.w*4),d0
  140.  add.l LEVELDATA,d0
  141.  move.l d0,objroom
  142.  
  143.  jsr ViewpointToDraw
  144.  
  145.  asl.l #2,d0
  146.  add.l alframe,d0
  147.  add.l #$40000,d0
  148.  move.l d0,8(a0)
  149.  
  150.  move.w TurnSpeed(a0),d0
  151.  add.w Facing(a0),d0
  152.  and.w #8190,d0
  153.  move.w d0,Facing(a0)
  154.  
  155.  move.w 4(a0),d0
  156.  ext.l d0
  157.  asl.l #7,d0
  158.  sub.l #48*128,d0
  159.  move.l d0,newy
  160.  move.l d0,oldy
  161.  
  162.  move.w 12(a0),FromZone
  163.  bsr CheckTeleport
  164.  tst.b OKTEL
  165.  beq.s .notel
  166.  move.l floortemp,d0
  167.  asr.l #7,d0
  168.  add.w d0,4(a0)
  169.  bra .nochangedir
  170. .notel:
  171.  
  172.  
  173.  move.w maxspd(a0),d2
  174.  muls TempFrames,d2
  175.  move.w d2,speed
  176.  move.w Facing(a0),d0
  177.  move.b ObjInTop(a0),StoodInTop
  178.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  179.  jsr GoInDirection
  180.  move.w #%1000000000,wallflags
  181.  
  182.  move.l #%11111111110111100001,CollideFlags
  183.  jsr Collision
  184.  tst.b hitwall
  185.  beq.s .okcanmove
  186.  
  187.  move.w oldx,newx
  188.  move.w oldz,newz
  189.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  190.  bra.s .hitathing
  191.  
  192. .okcanmove:
  193.  
  194.  clr.b wallbounce
  195.  jsr MoveObject
  196.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  197.  move.b StoodInTop,ObjInTop(a0)
  198.  
  199. .hitathing:
  200.  
  201. ; tst.b hitwall
  202. ; beq.s .nochangedir
  203. ; move.w #-1,ObjTimer(a0)
  204. .nochangedir
  205.  
  206.  move.l objroom,a2
  207.  move.w (a2),12(a0)
  208.  move.w newx,(a1)
  209.  move.w newz,4(a1)
  210.  
  211.  move.w (a2),d0
  212.  move.l #ZoneBrightTable,a5
  213.  move.l (a5,d0.w*4),d0
  214.  tst.b ObjInTop(a0)
  215.  bne.s .okbit
  216.  swap d0
  217. .okbit:
  218.  move.w d0,2(a0)
  219.  
  220.  move.l ToZoneFloor(a2),d0
  221.  move.l ToZoneRoof(a2),d1
  222.  tst.b ObjInTop(a0)
  223.  beq.s .notintop
  224.  move.l ToUpperFloor(a2),d0
  225.  move.l ToUpperRoof(a2),d1
  226. .notintop:
  227.  
  228.  move.w objyvel(a0),d2
  229.  add.w d2,4(a0)
  230.  
  231.  move.w 4(a0),d2
  232.  ext.l d2
  233.  asl.l #7,d2
  234.  move.l d2,d3
  235.  add.l #48*256,d2
  236.  sub.l #48*256,d3
  237.  
  238.  cmp.l d0,d2
  239.  blt.s .botnohit
  240.  move.l d0,d2
  241.  move.l d2,d3
  242.  neg.w objyvel(a0)
  243.  sub.l #96*256,d3
  244. .botnohit:
  245.  
  246.  cmp.l d1,d3
  247.  bgt.s .topnohit
  248.  move.l d1,d3
  249.  neg.w objyvel(a0)
  250. .topnohit:
  251.  
  252.  add.l #48*256,d3
  253.  asr.l #7,d3
  254.  move.w d3,4(a0)
  255.  
  256.  move.b damagetaken(a0),d2
  257.  beq .noscream
  258.  
  259.  sub.b d2,numlives(a0)
  260.  bgt .notdeadyet
  261.  
  262.  cmp.b #40,d2
  263.  ble.s .noexplode
  264.  
  265.  movem.l d0-d7/a0-a6,-(a7)
  266.  sub.l ObjectPoints,a1
  267.  add.l #ObjRotated,a1
  268.  move.l (a1),Noisex
  269.  move.w #400,Noisevol
  270.  move.w #14,Samplenum
  271.  move.b #1,chanpick
  272.  clr.b notifplaying
  273.  st backbeat
  274.  move.b 1(a0),IDNUM
  275.  jsr MakeSomeNoise
  276.  movem.l (a7)+,d0-d7/a0-a6
  277.  
  278.  movem.l d0-d7/a0-a6,-(a7)
  279.  move.w #0,d0
  280.  move.w #9,d2
  281.  move.w #31,d3
  282.  jsr ExplodeIntoBits
  283.  movem.l (a7)+,d0-d7/a0-a6
  284.  move.w #-1,12(a0)
  285.  rts
  286.  
  287. .noexplode:
  288.  
  289.  movem.l d0-d7/a0-a6,-(a7)
  290.  sub.l ObjectPoints,a1
  291.  add.l #ObjRotated,a1
  292.  move.l (a1),Noisex
  293.  move.w #200,Noisevol
  294.  move.w screamsound,Samplenum
  295.  move.b #1,chanpick
  296.  clr.b notifplaying
  297.  st backbeat
  298.  move.b 1(a0),IDNUM
  299.  jsr MakeSomeNoise
  300.  movem.l (a7)+,d0-d7/a0-a6
  301.  move.w #18,10(a0)
  302.  move.w #30,ThirdTimer(a0)
  303.  move.w #0,FourthTimer(a0)
  304.  move.w #80,d0
  305.  jsr FindCloseRoom
  306.  rts
  307.  
  308. .notdeadyet:
  309.  clr.b damagetaken(a0)
  310.  movem.l d0-d7/a0-a6,-(a7)
  311.  sub.l ObjectPoints,a1
  312.  add.l #ObjRotated,a1
  313.  move.l (a1),Noisex
  314.  move.w #200,Noisevol
  315.  move.w screamsound,Samplenum
  316.  move.b #1,chanpick
  317.  clr.b notifplaying
  318.  move.b 1(a0),IDNUM
  319.  st backbeat
  320.  jsr MakeSomeNoise
  321.  movem.l (a7)+,d0-d7/a0-a6
  322.  
  323. .noscream
  324.  
  325.  
  326.  move.w TempFrames,d0
  327.  sub.w d0,ObjTimer(a0)
  328.  bge.s .keepsamedir
  329.  
  330.  jsr GetRand
  331.  lsr.w #4,d0
  332.  and.w #255,d0
  333.  sub.w #128,d0
  334.  add.w d0,d0
  335.  move.w d0,TurnSpeed(a0)
  336.  move.w #50,ObjTimer(a0)
  337.  
  338.  jsr GetRand
  339.  lsr.w #4,d0
  340.  and.w #7,d0
  341.  sub.w #3,d0
  342.  move.w d0,d1
  343.  jsr GetRand
  344.  lsr.w #5,d0
  345.  and.w #1,d0
  346.  sub.w d0,d1
  347.  move.w d1,objyvel(a0)
  348.  
  349. .keepsamedir:
  350.  
  351.  move.w TempFrames,d0
  352.  sub.w d0,SecTimer(a0)
  353.  bge.s .nohiss
  354.  
  355.  movem.l d0-d7/a0-a6,-(a7)
  356.  sub.l ObjectPoints,a1
  357.  add.l #ObjRotated,a1
  358.  move.l (a1),Noisex
  359.  move.w #100,Noisevol
  360.  move.w #16,Samplenum
  361.  move.b #1,chanpick
  362.  clr.b notifplaying
  363.  move.b 1(a0),IDNUM
  364.  st backbeat
  365.  jsr MakeSomeNoise
  366.  movem.l (a7)+,d0-d7/a0-a6
  367.  
  368.  Jsr GetRand
  369.  lsr.w #6,d0
  370.  and.w #255,d0
  371.  add.w #300,d0
  372.  move.w d0,SecTimer(a0)
  373.  
  374. .nohiss:
  375.  
  376.  move.b ObjInTop(a0),ViewerTop
  377.  move.b PLR1_StoodInTop,TargetTop
  378.  move.l PLR1_Roompt,ToRoom
  379.  move.l objroom,FromRoom
  380.  move.w newx,Viewerx
  381.  move.w newz,Viewerz
  382.  move.w PLR1_xoff,Targetx
  383.  move.w PLR1_zoff,Targetz
  384.  move.l PLR1_yoff,d0
  385.  asr.l #7,d0
  386.  move.w d0,Targety
  387.  move.w 4(a0),Viewery
  388.  jsr CanItBeSeen
  389.  
  390.  clr.b 17(a0)
  391.  tst.b CanSee
  392.  beq .carryonprowling
  393.  
  394.  move.b #1,17(a0)
  395.  
  396. .carryonprowling:
  397.  
  398.  cmp.b #'n',mors
  399.  beq.s .carryonprowling2
  400.  
  401.  move.b ObjInTop(a0),ViewerTop
  402.  move.b PLR2_StoodInTop,TargetTop
  403.  move.l PLR2_Roompt,ToRoom
  404.  move.l objroom,FromRoom
  405.  move.w newx,Viewerx
  406.  move.w newz,Viewerz
  407.  move.w PLR2_xoff,Targetx
  408.  move.w PLR2_zoff,Targetz
  409.  move.l PLR2_yoff,d0
  410.  asr.l #7,d0
  411.  move.w d0,Targety
  412.  move.w 4(a0),Viewery
  413.  jsr CanItBeSeen
  414.  
  415.  tst.b CanSee
  416.  beq .carryonprowling2
  417.  
  418.  or.b #2,17(a0)
  419.  
  420. .carryonprowling2:
  421.  
  422.  move.w #80,d0
  423.  jsr FindCloseRoom
  424.  
  425.  rts
  426.  
  427. FlyingBallAttack:
  428.  
  429.  btst #0,17(a0)
  430.  beq FlyingBallAttackPLR2
  431.  btst #1,17(a0)
  432.  beq FlyingBallAttackPLR1
  433.  
  434.  move.l ObjectPoints,a1
  435.  move.w (a0),d0
  436.  move.w (a1,d0.w*8),d1
  437.  move.w 4(a1,d0.w*8),d2
  438.  
  439.  move.w PLR1_xoff,d3
  440.  move.w PLR1_zoff,d4
  441.  
  442.  sub.w d1,d3
  443.  sub.w d2,d4
  444.  
  445.  muls d3,d3
  446.  muls d4,d4
  447.  add.l d4,d3
  448.  move.w PLR2_xoff,d4
  449.  move.w PLR2_zoff,d5
  450.  sub.w d1,d4
  451.  sub.w d2,d5
  452.  
  453.  muls d4,d4
  454.  muls d5,d5
  455.  add.l d5,d4
  456.  cmp.l d3,d4
  457.  bgt FlyingBallAttackPLR1
  458.  
  459. FlyingBallAttackPLR2:
  460.  
  461.  move.w TempFrames,d0
  462.  sub.w d0,FourthTimer(a0)
  463.  bgt.s .oktoshoot
  464.  move.w #50,ThirdTimer(a0)
  465. .oktoshoot:
  466.  
  467.  move.w 12(a0),d2
  468.  move.l ZoneAdds,a5
  469.  move.l (a5,d2.w*4),d0
  470.  add.l LEVELDATA,d0
  471.  move.l d0,objroom
  472.  
  473.  jsr ViewpointToDraw
  474.  
  475.  asl.l #2,d0
  476.  bne.s .nofacing
  477.  move.l #16,d0
  478.  bra .facing
  479. .nofacing:
  480.  
  481.  add.l alframe,d0
  482. .facing
  483.  add.l #$40000,d0
  484.  move.l d0,8(a0)
  485.  
  486.  move.w PLR2_xoff,newx
  487.  move.w PLR2_zoff,newz
  488.  move.w (a0),d1
  489.  move.l #ObjRotated,a6
  490.  move.l ObjectPoints,a1
  491.  lea (a1,d1.w*8),a1
  492.  lea (a6,d1.w*8),a6
  493.  move.w (a1),oldx
  494.  move.w 4(a1),oldz
  495.  move.w maxspd(a0),d2
  496.  muls.w TempFrames,d2
  497.  move.w d2,speed
  498.  move.w #120,Range
  499.  move.w 4(a0),d0
  500.  ext.l d0
  501.  asl.l #7,d0
  502.  sub.l #48*256,d0
  503.  move.l d0,newy
  504.  move.l d0,oldy
  505.  
  506.  move.b ObjInTop(a0),StoodInTop
  507.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  508.  clr.b canshove
  509.  clr.b GotThere
  510.  jsr HeadTowardsAng
  511.  move.w #%1000000000,wallflags
  512.  
  513.  
  514.  clr.b wallbounce
  515.  Jsr MoveObject
  516.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  517.  move.b StoodInTop,ObjInTop(a0)
  518.  
  519.  move.w AngRet,Facing(a0)
  520.  
  521.  move.l objroom,a2
  522.  move.w (a2),12(a0)
  523.  move.w oldx,(a1)
  524.  move.w oldz,4(a1)
  525.  
  526.  move.w (a2),d0
  527.  move.l #ZoneBrightTable,a5
  528.  move.l (a5,d0.w*4),d0
  529.  tst.b ObjInTop(a0)
  530.  bne.s .okbit
  531.  swap d0
  532. .okbit:
  533.  move.w d0,2(a0)
  534.  
  535.  move.l ToZoneFloor(a2),d0
  536.  move.l ToZoneRoof(a2),d1
  537.  tst.b ObjInTop(a0)
  538.  beq.s .notintop
  539.  move.l ToUpperFloor(a2),d0
  540.  move.l ToUpperRoof(a2),d1
  541. .notintop:
  542.  
  543.  move.w objyvel(a0),d2
  544.  add.w d2,4(a0)
  545.  
  546.  move.w 4(a0),d2
  547.  ext.l d2
  548.  asl.l #7,d2
  549.  move.l d2,d3
  550.  add.l #48*256,d2
  551.  sub.l #48*256,d3
  552.  
  553.  cmp.l d0,d2
  554.  blt.s .botnohit
  555.  move.l d0,d2
  556.  move.l d2,d3
  557.  neg.w objyvel(a0)
  558.  sub.l #96*256,d3
  559. .botnohit:
  560.  
  561.  cmp.l d1,d3
  562.  bgt.s .topnohit
  563.  move.l d1,d3
  564.  neg.w objyvel(a0)
  565. .topnohit:
  566.  
  567.  add.l #48*256,d3
  568.  asr.l #7,d3
  569.  move.w d3,4(a0)
  570.  
  571.  move.b damagetaken(a0),d2
  572.  beq .noscream
  573.  
  574.  sub.b d2,numlives(a0)
  575.  bgt .notdeadyet
  576.  
  577.  cmp.b #40,d2
  578.  ble.s .noexplode
  579.  
  580.  movem.l d0-d7/a0-a6,-(a7)
  581.  sub.l ObjectPoints,a1
  582.  add.l #ObjRotated,a1
  583.  move.l (a1),Noisex
  584.  move.w #400,Noisevol
  585.  move.w #14,Samplenum
  586.  move.b #1,chanpick
  587.  clr.b notifplaying
  588.  st backbeat
  589.  move.b 1(a0),IDNUM
  590.  jsr MakeSomeNoise
  591.  movem.l (a7)+,d0-d7/a0-a6
  592.  
  593.  movem.l d0-d7/a0-a6,-(a7)
  594.  move.w #0,d0
  595.  move.w #9,d2
  596.  move.w #31,d3
  597.  jsr ExplodeIntoBits
  598.  movem.l (a7)+,d0-d7/a0-a6
  599.  move.w #-1,12(a0)
  600.  rts
  601.  
  602. .noexplode:
  603.  
  604.  movem.l d0-d7/a0-a6,-(a7)
  605.  sub.l ObjectPoints,a1
  606.  add.l #ObjRotated,a1
  607.  move.l (a1),Noisex
  608.  move.w #200,Noisevol
  609.  move.w screamsound,Samplenum
  610.  move.b #1,chanpick
  611.  clr.b notifplaying
  612.  st backbeat
  613.  move.b 1(a0),IDNUM
  614.  jsr MakeSomeNoise
  615.  movem.l (a7)+,d0-d7/a0-a6
  616.  move.w #18,10(a0)
  617.  move.w #80,d0
  618.  jsr FindCloseRoom
  619.  rts
  620.  
  621. .notdeadyet:
  622.  clr.b damagetaken(a0)
  623.  movem.l d0-d7/a0-a6,-(a7)
  624.  sub.l ObjectPoints,a1
  625.  add.l #ObjRotated,a1
  626.  move.l (a1),Noisex
  627.  move.w #200,Noisevol
  628.  move.w screamsound,Samplenum
  629.  move.b #1,chanpick
  630.  clr.b notifplaying
  631.  move.b 1(a0),IDNUM
  632.  st backbeat
  633.  jsr MakeSomeNoise
  634.  movem.l (a7)+,d0-d7/a0-a6
  635.  
  636. .noscream
  637.  
  638. ; tst.b canshootgun
  639. ; beq .cantshoot
  640.  cmp.w #20,FourthTimer(a0)
  641.  bge .cantshoot
  642.  
  643.   move.w #50,ThirdTimer(a0)
  644.  
  645.  move.w #17,10(a0)
  646.  
  647.  
  648.  move.w #20,Samplenum
  649.  move.b #0,SHOTTYPE
  650.  move.b #5,SHOTPOWER
  651.  move.w #16,SHOTSPEED
  652.  move.w #3,SHOTSHIFT
  653.  move.b ObjInTop(a0),SHOTINTOP
  654.  move.w #0,SHOTOFFMULT
  655.  move.w #-10,2(a0)
  656.  move.l #0,SHOTYOFF
  657.  jsr FireAtPlayer2
  658.  
  659. .cantshoot:
  660.  
  661.  
  662.  move.w TempFrames,d0
  663.  sub.w d0,SecTimer(a0)
  664.  bge.s .nohiss
  665.  
  666.  movem.l d0-d7/a0-a6,-(a7)
  667.  sub.l ObjectPoints,a1
  668.  add.l #ObjRotated,a1
  669.  move.l (a1),Noisex
  670.  move.w #100,Noisevol
  671.  move.w #16,Samplenum
  672.  move.b #1,chanpick
  673.  clr.b notifplaying
  674.  move.b 1(a0),IDNUM
  675.  st backbeat
  676.  jsr MakeSomeNoise
  677.  movem.l (a7)+,d0-d7/a0-a6
  678.  
  679.  Jsr GetRand
  680.  lsr.w #6,d0
  681.  and.w #255,d0
  682.  add.w #300,d0
  683.  move.w d0,SecTimer(a0)
  684.  
  685. .nohiss:
  686.  
  687.  move.b ObjInTop(a0),ViewerTop
  688.  move.b PLR1_StoodInTop,TargetTop
  689.  move.l PLR1_Roompt,ToRoom
  690.  move.l objroom,FromRoom
  691.  move.w newx,Viewerx
  692.  move.w newz,Viewerz
  693.  move.w PLR1_xoff,Targetx
  694.  move.w PLR1_zoff,Targetz
  695.  move.l PLR1_yoff,d0
  696.  asr.l #7,d0
  697.  move.w d0,Targety
  698.  move.w 4(a0),Viewery
  699.  jsr CanItBeSeen
  700.  
  701.  clr.b 17(a0)
  702.  tst.b CanSee
  703.  beq .carryonprowling
  704.  
  705.  move.b #1,17(a0)
  706.  
  707. .carryonprowling:
  708.  
  709.  cmp.b #'n',mors
  710.  beq.s .carryonprowling2
  711.  
  712.  
  713.  move.b ObjInTop(a0),ViewerTop
  714.  move.b PLR2_StoodInTop,TargetTop
  715.  move.l PLR2_Roompt,ToRoom
  716.  move.l objroom,FromRoom
  717.  move.w newx,Viewerx
  718.  move.w newz,Viewerz
  719.  move.w PLR2_xoff,Targetx
  720.  move.w PLR2_zoff,Targetz
  721.  move.l PLR2_yoff,d0
  722.  asr.l #7,d0
  723.  move.w d0,Targety
  724.  move.w 4(a0),Viewery
  725.  jsr CanItBeSeen
  726.  
  727.  tst.b CanSee
  728.  beq .carryonprowling2
  729.  
  730.  or.b #2,17(a0)
  731.  
  732. .carryonprowling2:
  733.  move.w #80,d0
  734.  jsr FindCloseRoom
  735.  
  736.  rts
  737.  
  738.  
  739. FlyingBallAttackPLR1:
  740.  
  741.  move.w TempFrames,d0
  742.  sub.w d0,FourthTimer(a0)
  743.  bgt.s .oktoshoot
  744.  move.w #50,ThirdTimer(a0)
  745. .oktoshoot:
  746.  
  747.  move.w 12(a0),d2
  748.  move.l ZoneAdds,a5
  749.  move.l (a5,d2.w*4),d0
  750.  add.l LEVELDATA,d0
  751.  move.l d0,objroom
  752.  
  753.  jsr ViewpointToDraw
  754.  
  755.  asl.l #2,d0
  756.  bne.s .nofacing
  757.  move.l #16,d0
  758.  bra .facing
  759. .nofacing:
  760.  
  761.  add.l alframe,d0
  762. .facing
  763.  add.l #$40000,d0
  764.  move.l d0,8(a0)
  765.  
  766.  move.w PLR1_xoff,newx
  767.  move.w PLR1_zoff,newz
  768.  move.w (a0),d1
  769.  move.l #ObjRotated,a6
  770.  move.l ObjectPoints,a1
  771.  lea (a1,d1.w*8),a1
  772.  lea (a6,d1.w*8),a6
  773.  move.w (a1),oldx
  774.  move.w 4(a1),oldz
  775.  move.w maxspd(a0),d2
  776.  muls.w TempFrames,d2
  777.  move.w d2,speed
  778.  move.w #120,Range
  779.  move.w 4(a0),d0
  780.  ext.l d0
  781.  asl.l #7,d0
  782.  sub.l #20*256,d0
  783.  move.l d0,newy
  784.  move.l d0,oldy
  785.  
  786.  move.b ObjInTop(a0),StoodInTop
  787.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  788.  clr.b canshove
  789.  clr.b GotThere
  790.  jsr HeadTowardsAng
  791.  move.w #%1000000000,wallflags
  792.  
  793.   
  794.  clr.b wallbounce
  795.  Jsr MoveObject
  796.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  797.  move.b StoodInTop,ObjInTop(a0)
  798.  
  799.  move.w AngRet,Facing(a0)
  800.  
  801.  move.l objroom,a2
  802.  move.w (a2),12(a0)
  803.  move.w oldx,(a1)
  804.  move.w oldz,4(a1)
  805.  
  806.  move.w (a2),d0
  807.  move.l #ZoneBrightTable,a5
  808.  move.l (a5,d0.w*4),d0
  809.  tst.b ObjInTop(a0)
  810.  bne.s .okbit
  811.  swap d0
  812. .okbit:
  813.  move.w d0,2(a0)
  814.  
  815.  move.l ToZoneFloor(a2),d0
  816.  move.l ToZoneRoof(a2),d1
  817.  tst.b ObjInTop(a0)
  818.  beq.s .notintop
  819.  move.l ToUpperFloor(a2),d0
  820.  move.l ToUpperRoof(a2),d1
  821. .notintop:
  822.  
  823.  move.w objyvel(a0),d2
  824.  add.w d2,4(a0)
  825.  
  826.  move.w 4(a0),d2
  827.  ext.l d2
  828.  asl.l #7,d2
  829.  move.l d2,d3
  830.  add.l #48*256,d2
  831.  sub.l #48*256,d3
  832.  
  833.  cmp.l d0,d2
  834.  blt.s .botnohit
  835.  move.l d0,d2
  836.  move.l d2,d3
  837.  neg.w objyvel(a0)
  838.  sub.l #96*256,d3
  839. .botnohit:
  840.  
  841.  cmp.l d1,d3
  842.  bgt.s .topnohit
  843.  move.l d1,d3
  844.  neg.w objyvel(a0)
  845. .topnohit:
  846.  
  847.  add.l #48*256,d3
  848.  asr.l #7,d3
  849.  move.w d3,4(a0)
  850.  
  851.  move.b damagetaken(a0),d2
  852.  beq .noscream
  853.  
  854.  sub.b d2,numlives(a0)
  855.  bgt .notdeadyet
  856.  
  857.  cmp.b #40,d2
  858.  ble.s .noexplode
  859.  
  860.  movem.l d0-d7/a0-a6,-(a7)
  861.  sub.l ObjectPoints,a1
  862.  add.l #ObjRotated,a1
  863.  move.l (a1),Noisex
  864.  move.w #400,Noisevol
  865.  move.w #14,Samplenum
  866.  move.b #1,chanpick
  867.  clr.b notifplaying
  868.  st backbeat
  869.  move.b 1(a0),IDNUM
  870.  jsr MakeSomeNoise
  871.  movem.l (a7)+,d0-d7/a0-a6
  872.  
  873.  movem.l d0-d7/a0-a6,-(a7)
  874.  move.w #0,d0
  875.  move.w #9,d2
  876.  move.w #31,d3
  877.  jsr ExplodeIntoBits
  878.  movem.l (a7)+,d0-d7/a0-a6
  879.  move.w #-1,12(a0)
  880.  rts
  881.  
  882. .noexplode:
  883.  
  884.  movem.l d0-d7/a0-a6,-(a7)
  885.  sub.l ObjectPoints,a1
  886.  add.l #ObjRotated,a1
  887.  move.l (a1),Noisex
  888.  move.w #200,Noisevol
  889.  move.w screamsound,Samplenum
  890.  move.b #1,chanpick
  891.  clr.b notifplaying
  892.  st backbeat
  893.  move.b 1(a0),IDNUM
  894.  jsr MakeSomeNoise
  895.  movem.l (a7)+,d0-d7/a0-a6
  896.  move.w #18,10(a0)
  897.  move.w #80,d0
  898.  jsr FindCloseRoom
  899.  rts
  900.  
  901. .notdeadyet:
  902.  clr.b damagetaken(a0)
  903.  movem.l d0-d7/a0-a6,-(a7)
  904.  sub.l ObjectPoints,a1
  905.  add.l #ObjRotated,a1
  906.  move.l (a1),Noisex
  907.  move.w #200,Noisevol
  908.  move.w screamsound,Samplenum
  909.  move.b #1,chanpick
  910.  clr.b notifplaying
  911.  move.b 1(a0),IDNUM
  912.  st backbeat
  913.  jsr MakeSomeNoise
  914.  movem.l (a7)+,d0-d7/a0-a6
  915.  
  916. .noscream
  917.  
  918. ; tst.b canshootgun
  919. ; beq .cantshoot
  920.  cmp.w #20,FourthTimer(a0)
  921.  bge .cantshoot
  922.  
  923.  move.w #50,ThirdTimer(a0)
  924.  
  925.  move.w #17,10(a0)
  926.  
  927.  
  928.  move.w #20,Samplenum
  929.  move.b #0,SHOTTYPE
  930.  move.b #5,SHOTPOWER
  931.  move.w #16,SHOTSPEED
  932.  move.w #3,SHOTSHIFT
  933.  move.b ObjInTop(a0),SHOTINTOP
  934.  move.w #0,SHOTOFFMULT
  935.  move.w #-10,2(a0)
  936.  move.l #0,SHOTYOFF
  937.  jsr FireAtPlayer1
  938.  
  939. .cantshoot:
  940.  
  941.  
  942.  move.w TempFrames,d0
  943.  sub.w d0,SecTimer(a0)
  944.  bge.s .nohiss
  945.  
  946.  movem.l d0-d7/a0-a6,-(a7)
  947.  sub.l ObjectPoints,a1
  948.  add.l #ObjRotated,a1
  949.  move.l (a1),Noisex
  950.  move.w #100,Noisevol
  951.  move.w #16,Samplenum
  952.  move.b #1,chanpick
  953.  clr.b notifplaying
  954.  move.b 1(a0),IDNUM
  955.  st backbeat
  956.  jsr MakeSomeNoise
  957.  movem.l (a7)+,d0-d7/a0-a6
  958.  
  959.  Jsr GetRand
  960.  lsr.w #6,d0
  961.  and.w #255,d0
  962.  add.w #300,d0
  963.  move.w d0,SecTimer(a0)
  964.  
  965. .nohiss:
  966.  
  967.  move.b ObjInTop(a0),ViewerTop
  968.  move.b PLR1_StoodInTop,TargetTop
  969.  move.l PLR1_Roompt,ToRoom
  970.  move.l objroom,FromRoom
  971.  move.w newx,Viewerx
  972.  move.w newz,Viewerz
  973.  move.w PLR1_xoff,Targetx
  974.  move.w PLR1_zoff,Targetz
  975.  move.l PLR1_yoff,d0
  976.  asr.l #7,d0
  977.  move.w d0,Targety
  978.  move.w 4(a0),Viewery
  979.  jsr CanItBeSeen
  980.  
  981.  clr.b 17(a0)
  982.  tst.b CanSee
  983.  beq .carryonprowling
  984.  
  985.  move.b #1,17(a0)
  986.  
  987. .carryonprowling:
  988.  
  989.  cmp.b #'n',mors
  990.  beq.s .carryonprowling2
  991.  
  992.  
  993.  move.b ObjInTop(a0),ViewerTop
  994.  move.b PLR2_StoodInTop,TargetTop
  995.  move.l PLR2_Roompt,ToRoom
  996.  move.l objroom,FromRoom
  997.  move.w newx,Viewerx
  998.  move.w newz,Viewerz
  999.  move.w PLR2_xoff,Targetx
  1000.  move.w PLR2_zoff,Targetz
  1001.  move.l PLR2_yoff,d0
  1002.  asr.l #7,d0
  1003.  move.w d0,Targety
  1004.  move.w 4(a0),Viewery
  1005.  jsr CanItBeSeen
  1006.  
  1007.  tst.b CanSee
  1008.  beq .carryonprowling2
  1009.  
  1010.  or.b #2,17(a0)
  1011.  
  1012. .carryonprowling2:
  1013.  move.w #80,d0
  1014.  jsr FindCloseRoom
  1015.  
  1016.  rts
  1017.